﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Leo.Entities;
using Microsoft.Practices.Unity;
using Leo.Repository;

namespace Leo.BL
{
   public class ProductoBL: IProductoBL
    {

       [Dependency]
       public IProductoRepository ProdBl { get; set; }

        public List<Producto> GetAllFromProducto()
        {
            return ProdBl.GetAllFromProducto();
        }

        public List<Producto> GetFromProductoByCriterio(string criterio)
        {
            return ProdBl.GetFromProductoByCriterio(criterio);
        }

        public Producto GetFromProductoById(int id_producto)
        {
            return ProdBl.GetFromProductoById(id_producto);
        }

        public void AddProducto(Producto producto)
        {
            var duplicidad = ProdBl.ExisteDuplicidad(producto.Nombre, producto.Id);

            if (!duplicidad)
            {
                var msg = "";
                var ok = producto.Validate(out msg);

                if (ok)
                {
                    ProdBl.AddProducto(producto);
                }
                else
                {
                    throw new Exception(msg);
                }
            }
            else
            {
                var error = string.Format("Ya existe un producto con el mismo nombre" + " " + "\n" + producto.Nombre);
                throw new Exception(error);
            }
        }

        public void UpdateProducto(Producto producto)
        {
            var duplicidad = ProdBl.ExisteDuplicidad(producto.Nombre, producto.Id);

            if (!duplicidad)
            {
                var msg = "";
                var ok = producto.Validate(out msg);
                if (ok)
                {
                    ProdBl.UpdateProducto(producto);
                }
                else
                {
                    throw new Exception(msg);
                }
            }
            else
            {
                var error = string.Format("Ya existe un producto con el mismo nombre "+ " " + "\n" + producto.Nombre);
                throw new Exception(error);
            }
        }

        public void RemoveProducto(int id_producto)
        {
            ProdBl.RemoveProducto(id_producto);
        }
    }
}
